#ifndef GRAPHICSBOARD_H
#define GRAPHICSBOARD_H

/*
 * 棋盘画板类，继承QWidget，通过重写paintEvent函数，实现对可行局面的显示
 * 成员变量m_board指向solver的lastres数组，以便获取所解得的局面
 * 方格大小、线条宽度可随窗口大小变化自动适应
*/

#include <QObject>
#include <QWidget>

#include "EightQueenSolver.h"

class GraphicsBoard : public QWidget {
  Q_OBJECT
 public:
  GraphicsBoard(QWidget*&);

  // 管理棋盘大小，应与N皇后的n值同步
  void setN(int n) { m_n = n; }
  int getN() { return m_n; }  // 获取棋盘大小

  // 管理棋盘指针
  void setBoard(Board2D b) {
    m_board = b;
    m_board1d = nullptr;
  }
  void setBoard(Board1D b) {
    m_board = nullptr;
    m_board1d = b;
  }
  // 获取棋盘指针
  Board2D board2d() { return m_board; }
  Board1D board1d() { return m_board1d; }

 protected:
  void paintEvent(QPaintEvent* event);

 private:
  float gridWidth;  // 方格边长
  int m_n;          // 棋盘大小

  Board2D m_board;  // 二维数组棋盘指针
  Board1D m_board1d;  // 一维数组棋盘指针
};

#endif  // GRAPHICSBOARD_H
